home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / ss / ct_c.sed < prev   
Text File  |  2005-10-13  |  2KB  |  161 lines

  1. #
  2. # This script parses a command_table file into something which is a bit 
  3. # easier for an awk script to understand.
  4. #
  5. # Input syntax: a .ct file
  6. #
  7. # Output syntax:
  8. # (for the command_table line)
  9. #    command_table  <command_table>
  10. #
  11. #(for each request definition)
  12. #    BOR
  13. #    sub: <subroutine name>
  14. #    hlp: <help text>
  15. #    cmd: <command>
  16. #    opt: <option>
  17. #    EOR
  18. # (there may be more than one 'cmd' or 'opt' line
  19. #
  20. # A number sent to the output represents a parse error --- it will be 
  21. # followed by the next line which will have the form:
  22. #    ERROR: <error text>
  23. #
  24. # The design of this output syntax is such that it should be easy for
  25. # an awk script to parse.
  26.  
  27. #
  28. # The first section of this script is just to cannoicalize the file.  
  29. # It removes comments, and puts each command_table request onto a single
  30. # line
  31. #
  32. :FIRST
  33. y/    / /
  34. s/^ *//
  35. s/#.*$//
  36. /; *$/!{
  37. N
  38. y/    / /
  39. s/\n */ /
  40. bFIRST
  41. }
  42. s/, */, /g
  43. #
  44. # Now we take care of some syntatic sugar.....
  45. #
  46. /^unimplemented/ {
  47.     s/^unimplemented [A-Za-z_0-9]*/request ss_unimplemented/
  48.     s/;/, (dont_list, dont_summarize);/
  49. }
  50. /^unknown/ {
  51.     s/^unknown /request ss_unknown, "", /
  52. }
  53. #
  54. # Dispatch based on the keyword....  illegal keywords are prefixed by ERROR:
  55. # and are handled by the awk script.
  56. #
  57. /^command_table /bCMD
  58. /^request /bREQUEST
  59. /^end;/bEND
  60. s/ .*//
  61. s/^/ERROR: unknown keyword: /
  62. =
  63. b
  64. #
  65. # Handle the command_table keyword
  66. #
  67. :CMD
  68. s/;$//
  69. p
  70. d
  71. b
  72. #
  73. # Handle the request keyword --- this is the heart of the sed script.
  74. :REQUEST
  75. s/^request *//
  76. h
  77. i\
  78. BOR
  79. # First, parse out the subroutine name
  80. s/^/sub: /
  81. s/,.*//
  82. p
  83. # Next, parse out the help message, being careful to handle a quoted string
  84. g
  85. s/^[^,]*, *//
  86. h
  87. /^"/ {
  88.     s/^"//
  89.     s/".*//
  90.     x
  91.     s/^"[^"]*", *//
  92.     x
  93.     b EMITHLP
  94. }
  95. s/[^a-zA-Z0-9].*//
  96. x
  97. s/[a-zA-Z0-9]*, *//
  98. x
  99. :EMITHLP
  100. s/^/hlp: /
  101. p
  102. # Next take care of the command names
  103. :CMDLIST
  104. g
  105. /^(/b OPTIONS
  106. /^;/b EOR
  107. /^"/ {
  108.     s/^"//
  109.     s/".*//
  110.     x
  111.     s/^"[^"]*"//
  112.     s/, *//
  113.     x
  114.     b EMITREQ
  115. }
  116. s/[^A-Za-z_0-9].*//
  117. x
  118. s/[A-Za-z_0-9]*//
  119. s/, *//
  120. x
  121. :EMITREQ
  122. s/^/cmd: /
  123. p
  124. b CMDLIST
  125. #
  126. # Here we parse the list of options.
  127. #
  128. : OPTIONS
  129. g
  130. s/^(//
  131. h
  132. : OPTLIST
  133. /^)/ b EOR
  134. /^[^A-Za-z_0-9]/ {
  135.     =
  136.     c\
  137. ERROR: parse error in options list
  138. }
  139. s/[^A-Za-z_0-9].*//
  140. x
  141. s/[A-Za-z_0-9]*//
  142. s/, *//
  143. x
  144. s/^/opt: /
  145. p
  146. g
  147. b OPTLIST
  148. : EOR
  149. c\
  150. EOR\
  151.  
  152. d
  153. b
  154. #
  155. # Handle the end keyword --- it's basically ignored.
  156. #
  157. :END
  158. d
  159. b
  160.